package test21.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPReceiverA {
    public static void main(String[] args) throws IOException {
        //1. 创建一个 DatagramSocket 对象，准备在9999接收数据
        DatagramSocket datagramSocket = new DatagramSocket(9999);
        //2. 构建一个 DatagramPacket 对象，准备接收数据
        //   UDP 协议一个数据包最大 64k
        byte[] buf = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(buf,buf.length);

        //3. 调用 接收方法, 将通过网络传输的 DatagramPacket 对象
        // 填充到datagramPacket对象
        //当有数据包发送到 本机的9999端口时，就会接收到数据
        //如果没有数据包发送到 本机的9999端口, 就会阻塞等待.
        System.out.println("接收端A 等待接收数据..");
        datagramSocket.receive(datagramPacket);

        //4. 可以把packet 进行拆包，取出数据，并显示.
        int length = datagramPacket.getLength();//实际接收到的数据字节长度
        byte[] data = datagramPacket.getData();//接收到数据
        String s = new String(data, 0, length);
        System.out.println(s);

        //回复信息给B端
        byte[] bytes = "好的, 明天见".getBytes();
        DatagramPacket datagramPacket1 =
                new DatagramPacket(bytes, bytes.length,
                        InetAddress.getByName("10.254.41.224"), 9998);
        datagramSocket.send(datagramPacket1);

        //5. 关闭资源
        datagramSocket.close();
        System.out.println("A端退出...");
    }
}
